Web log de Serge Boisse
On line depuis 1992 !
Auteur : Serge Boisse
Date : Le 07/03/2025 à 20:03
(je ne dis pas qu'ils sont géniaux parce que j'en suis l'auteur, mais bon, à vous de juger)
il suffit de créer les nouvelles notes à l'aide du Snippet suivant, qui vous demandera la nom de la note à créer et fabriquera le gabarit de la nouvelle note pour vous.
---
Auteur: Serge Boisse
Type: nouvelle_note
Date: Le <% tp.file.creation_date("DD/MM/YYYY[ à ]HH:MM") %>
Tags:
---
<%*
// Prompt for the title
let title = await tp.system.prompt('Enter title name');
// Rename the file to the entered
await tp.file.rename(title);
%>
# <%- title %>
>Auteur : `=this.Auteur`
>Date : `=this.Date`
Résumé :
blabla
>[!Remarque] Voir aussi :
>[Un super site !](<http://sboisse.free.fr>)
<br>
lier le snippet templater suivant avec un raccourci clavier :
<%*
// appel : j'ai créé le raccourci obsidian ctrl-j'
// voir aussi le Modèle texte à insérer/T_liste_attachements
const {path} = tp.app.workspace.getActiveFile();
//const path = "art.md";
let res = " ---Aucun attachement---";
const attachements = await tp.app.metadataCache.getCache(path).embeds;
let nb = 0;
if (attachements) {
res = "";
for (let att of attachements) {
res += ""+att.link+"\r\n";
}
nb = attachements.length;
}
tp.system.prompt("Liste des pièces jointes de cette note: ("+nb+")", res, false, true);
return "";
%>
Cela ouvrira un modal qui contiendra la liste des pièces jointes de la note.
Cliquer sur le nom du répertoire, clic droit, sélectionner "Create new note from template", et appeler le modèle templater "M_index" qui contiendra le (très long) code suivant :
---
Auteur: Serge Boisse
Date: Le 13/02/2025 à 15:02
Type: liste/index
Tags: index
#types : voir [[@ types et statut]]
---
<%*
// le nom de la note sera juste "index"
await tp.file.rename("index");
/**/
%>
# index de `=this.file.folder`
Dans ce répertoire :
```dataviewjs
function titre(path) {
let t = dv.app.metadataCache.getCache(path).headings;
let fileName = path.replace(/\/$/, "").split("/").pop();
if (fileName.slice(-3)==".md")
fileName = fileName.slice(0,-3)
if (!t || t.length == 0) return fileName;
t = t[0]; // first heading
if (!t) return fileName;
t = t.heading;
if (t.length <= 1 || t.length > 55) return fileName;
if (t[t.length-1] == ">") return fileName; // templater...
//console.log(t);
return t;
}
let parentFolder = dv.current().file.folder
if (parentFolder == "") parentFolder = "/"
function listRecursive(folder, depth) {
// All pages in the scope of the current path
let pages = dv.pages('"' + folder + '"');
// on va collecter les sous-répertoires directs
let subfolders = [];
pages.forEach(page => {
let afolder = page.file.folder;
if (afolder == folder) return;
if (!afolder.startsWith(folder)) return;
let relpath = afolder.substring(folder.length);
if (relpath == "") return;
let sub = relpath.split("/")[0];
if (folder != "") sub = relpath.split("/")[1];
if (sub == "") return;
if (!subfolders.includes(sub)) {
subfolders.push(sub);
}
});
let currentFiles = "";
let index = "";
pages.forEach(page => {
if (page.file.folder == folder || (folder=="" && page.file.folder == "/")) {
// Page is in current folder
// on exclut les pages privées
let fm = dv.app.metadataCache.getCache(page.file.path).frontmatter;
if (fm) {
let tags = fm["Tags"]+fm["tags"];
if (tags) {
if (tags.toLowerCase().includes("privé")) return;
if (tags.toLowerCase().includes("perso")) return;
}
let pub = fm["Publier"]+fm["Publish"]+fm["Export"];
if (pub) {
if (pub.toLowerCase().includes("no")) return;
}
}
//currentFiles += page.file.link + " | ";
//currentFiles += '<br><br>'
if (page.file.name.startsWith("index")) {
if (page.file.folder != parentFolder)
index = `<a class ="internal-link" href="${page.file.path}">Index</a> | `;
} else {
currentFiles += `<a class ="internal-link" href="${page.file.path}">${titre(page.file.path)}</a> | `
}
}
});
currentFiles += index;
if (currentFiles.endsWith(' | '))
currentFiles = currentFiles.slice(0,-3);
let indent = "\t".repeat(depth);
let rep = folder.substring(folder.lastIndexOf("/")+1);
// on commence par le nom du répertoire
let res = indent+"- ### "+rep+"</h3>";
if (folder == '') res = "- ### TOUTES LES NOTES</h3>";
//res += indent+currentFiles+"\n";
res += currentFiles+"\n";
// on ajoute les sous répertoires
for (let srep of subfolders) {
let subreps = "";
if (folder == "")
subreps += listRecursive(srep, depth+1);
else
subreps += listRecursive(folder+"/"+srep, depth+1);
//console.log(subreps)
//console.log(subreps.indexOf("</h3>"))
// il faut au moins qqchose apres le nom du rep
if (subreps.length > subreps.indexOf("</h3>")+6)
res += subreps;
}
return res;
}
// choose query here
//let files = listRecursive('_Créer/Blog, vidéos, site', 0); // directory of a given folder
//let files = listRecursive(dv.current().file.folder, 0); // directory of current folder
let files = listRecursive(parentFolder, 0); // directory of current folder
dv.el("p",files)
il faut ajouter trois backquotes à la fin du fichier pour ferme le bloc dataviews
Le résultat sera la création d'un fichier "index" sous le répertoire cliqué, qui ressemblera à l'image ci-dessous:
Les fichiers marqués privés ou private ne seront pas listés, de même que ceux qui contiennent le tag "Export:" ou "Publier:" suivi de no" (ou non, ou niet...)
C'est pas beau, ça ?
Commentaires (0) :
Page :Ajouter un commentaire (pas besoin de s'enregistrer)
En cliquant sur le bouton "Envoyer" vous acceptez les conditions suivantes : Ne pas poster de message injurieux, obscène ou contraire à la loi, ni de liens vers de tels sites. Respecter la "netiquette", ne pas usurper le pseudo d'une autre personne, respecter les posts faits par les autres. L'auteur du site se réserve le droit de supprimer un ou plusieurs posts à tout moment. Merci !Ah oui : le bbcode et le html genre <br>, <a href=...>, <b>b etc. ne fonctionnent pas dans les commentaires. C'est voulu.